﻿using DexComanda.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DexComanda
{
    public partial class frmCadastrarProduto : Form
    {
        private Conexao con;

        private Main parentMain;
        private Produto produto;
        private int codigoProdutoParaAlterar;
        private Empresa empresa;

        public frmCadastrarProduto(Main parent)
        {
            this.parentMain = parent;
            InitializeComponent();
        }

        public frmCadastrarProduto(Produto prod,Main parent)
        {
            this.parentMain = parent;
            this.produto = prod;
            InitializeComponent();
        }

        private void frmCadastrarProduto_Load(object sender, EventArgs e)
        {
            con = new Conexao();
            empresa = AutoConfig.getEmpresa();
            if (empresa.TipoEmpresa == 1) {
                
                txtCodBarra.Enabled = false;
                txtEstoque.Enabled = false;
                txtPrecoCusto.Enabled = false;
                checkInsumo.Enabled = false;
                
            }
            List<Grupo> grupos = new List<Grupo>();
            
            this.cbxGrupoProduto.DataSource = con.SelectAll("Grupo", "spObterGrupo").Tables["Grupo"];
            this.cbxGrupoProduto.DisplayMember = "NomeGrupo";
            this.cbxGrupoProduto.ValueMember = "Codigo";
            
            if (produto != null)
            {
                this.btnDoProduto.Text = "Alterar";
                this.btnDoProduto.Click -= AdicionarProduto;
                this.btnDoProduto.Click += AlterarProduto;

                codigoProdutoParaAlterar = produto.Codigo;
                this.nomeProdutoTextBox.Text = produto.Nome;
                this.cbxGrupoProduto.Text = produto.GrupoProduto;
                this.txtPrecoVenda.Text = produto.PrecoVenda.ToString();
                this.descricaoProdutoTextBox.Text = produto.Descricao.ToString();
            }

        }

        private void AdicionarProduto(object sender, EventArgs e) {

            Produto produto = null;

            if (empresa.TipoEmpresa == 1)
            {
                produto = new Produto() // Classe para adicionar produto do Delivery , não adiciona CodBarra,PreçoCusto e Insumo!
                {
                    Nome = this.nomeProdutoTextBox.Text,
                    Descricao = this.descricaoProdutoTextBox.Text,
                    PrecoVenda = Convert.ToDecimal(this.txtPrecoVenda.Text.Replace(".", ",")),
                    GrupoProduto = this.cbxGrupoProduto.Text
                };

                con.Insert("spAdicionarProduto", produto);

            } else if (empresa.TipoEmpresa == 2)  {
               produto = new Produto()
                {
                    Nome = this.nomeProdutoTextBox.Text,
                    Descricao = this.descricaoProdutoTextBox.Text,
                    PrecoVenda = Convert.ToDecimal(this.txtPrecoVenda.Text.Replace(".", ",")),
                    PrecoCusto = Convert.ToDecimal(this.txtPrecoCusto.Text.Replace(".", ",")),
                    CodBarra = txtCodBarra.Text,
                    GrupoProduto = this.cbxGrupoProduto.Text
                };

               if (checkInsumo.Checked == true)
               {
                   produto.Insumo = true;
               }
              
               con.Insert("spAdicionarProdutoCompleto", produto);
            }
            
      
            
            ClearForm(this);
            this_FormClosing();
            MessageBox.Show("Produto cadastrado com sucesso.");
        }

        public void AlterarProduto(object sender, EventArgs e)
        {
            Empresa empresa = AutoConfig.getEmpresa();
            Produto produto = null;

            if (empresa.TipoEmpresa == 1)
            {
                var nome = this.nomeProdutoTextBox.Text;
                var descricao = this.descricaoProdutoTextBox.Text;
                var preco = Convert.ToDecimal(this.txtPrecoVenda.Text.Replace(".", ","));
                var grupoProduto = this.cbxGrupoProduto.Text;

                produto = new Produto()
                {
                    Codigo = codigoProdutoParaAlterar,
                    Nome = nome,
                    Descricao = descricao,
                    PrecoVenda = preco,
                    GrupoProduto = grupoProduto,
                };

                con.Update("spAlterarProduto", produto);
            }
            else if (empresa.TipoEmpresa == 2)
            {
                var nome = this.nomeProdutoTextBox.Text;
                var descricao = this.descricaoProdutoTextBox.Text;
                var preco = Convert.ToDecimal(this.txtPrecoVenda.Text.Replace(".", ","));
                var grupoProduto = this.cbxGrupoProduto.Text;
                var PrecoCusto = Convert.ToDecimal(this.txtPrecoCusto.Text.Replace(".", ","));
                var CodBarra = this.txtCodBarra.Text;
                var estoque = Convert.ToDecimal(this.txtEstoque.Text);
                var Insumo = this.checkInsumo.Checked;

                produto = new Produto()
                {
                    Codigo = codigoProdutoParaAlterar,
                    Nome = nome,
                    Descricao = descricao,
                    PrecoVenda = preco,
                    GrupoProduto = grupoProduto,
                    PrecoCusto = PrecoCusto,
                    CodBarra = CodBarra,
                    Insumo = Insumo,
                    Estoque = estoque
                };
                con.Update("spAlterarProdutoCompleto", produto);
            }
            
            this.btnDoProduto.Text = "Cadastrar";
            this.btnDoProduto.Click -= AlterarProduto;
            this.btnDoProduto.Click += AdicionarProduto;
            ClearForm(this);
            this_FormClosing();
            MessageBox.Show("Produto alterado com sucesso.");
        }

        private void Cancelar(object sender, EventArgs e)
        {
            ClearForm(this);
        }

        private static void ClearForm(System.Windows.Forms.Control parent)
        {
            foreach (System.Windows.Forms.Control ctrControl in parent.Controls)
            {
                //Loop through all controls 
                if (object.ReferenceEquals(ctrControl.GetType(), typeof(System.Windows.Forms.TextBox)))
                {
                    //Check to see if it's a textbox 
                    ((System.Windows.Forms.TextBox)ctrControl).Text = string.Empty;
                    //If it is then set the text to String.Empty (empty textbox) 
                }
                else if (object.ReferenceEquals(ctrControl.GetType(), typeof(System.Windows.Forms.RichTextBox)))
                {
                    //If its a RichTextBox clear the text
                    ((System.Windows.Forms.RichTextBox)ctrControl).Text = string.Empty;
                }
                else if (object.ReferenceEquals(ctrControl.GetType(), typeof(System.Windows.Forms.ComboBox)))
                {
                    //Next check if it's a dropdown list 
                    ((System.Windows.Forms.ComboBox)ctrControl).SelectedIndex = -1;
                    //If it is then set its SelectedIndex to 0 
                }
                else if (object.ReferenceEquals(ctrControl.GetType(), typeof(System.Windows.Forms.CheckBox)))
                {
                    //Next uncheck all checkboxes
                    ((System.Windows.Forms.CheckBox)ctrControl).Checked = false;
                }
                else if (object.ReferenceEquals(ctrControl.GetType(), typeof(System.Windows.Forms.RadioButton)))
                {
                    //Unselect all RadioButtons
                    ((System.Windows.Forms.RadioButton)ctrControl).Checked = false;
                }
                if (ctrControl.Controls.Count > 0)
                {
                    //Call itself to get all other controls in other containers 
                    ClearForm(ctrControl);
                }
            }
        }
        private void this_FormClosing()
        {
            this.parentMain.PopularGrid("Produto",this.parentMain.produtosGridView);
            this.Dispose();
        }
    }
}
